// il C++ consente di generare un puntatore che punta genericamente
// ad un membro di una classe e non ad una specifica istanza
// di tale membro in un oggetto
// questo puntatore fornisce solo un valore di scostamento all'interno
// di un oggetto appartenente alla classe del membro in cui è 
// possibile trovare tale membro

#include <iostream>
using namespace std;
class cl {
public:
cl(int i) {val = i;};
int val;
int doppio_val() {return val+val;}
};


int main()
{
int cl::*data; // puntatore a membro dati
int (cl::*func)(); // puntatore a membro funzione
cl oggetto1(1),oggetto2(2); // crea oggetti

data=&cl::val; // calcola il valore di scostamento di val
func=&cl::doppio_val; // calcola il valore di scostamento di doppio_val

cout<<"i valori:";
cout<<(oggetto1.*func)()<<" ";
cout<<(oggetto2.*func)()<<" "<<endl;
	return 0;
}

